Don't leave vncviewer processes running if xm create fails
authoradsharma@los-vmm.sc.intel.com <adsharma@los-vmm.sc.intel.com>
Mon, 15 Aug 2005 20:50:25 +0000 (12:50 -0800)
committeradsharma@los-vmm.sc.intel.com <adsharma@los-vmm.sc.intel.com>
Mon, 15 Aug 2005 20:50:25 +0000 (12:50 -0800)
Signed-off-by: Edwin Zhai <edwin.zhai@intel.com>
Signed-off-by: Arun Sharma <arun.sharma@intel.com>
tools/python/xen/xm/create.py

index d20e47352e8b3d87820d53f325ab6eb4b8afd521..72aa2a3f63449b8e0563653a8e508535b3ae2c45 100644 (file)
@@ -592,9 +592,14 @@ def choose_vnc_display():
         return d
     return None
 
+vncpid = None
+
 def spawn_vnc(display):
-    os.system("vncviewer -log *:stdout:0 -listen %d &" %
-              (VNC_BASE_PORT + display))
+    vncargs = (["vncviewer" + "-log", "*:stdout:0",
+            "-listen", "%d" % (VNC_BASE_PORT + display) ])
+    global vncpid    
+    vncpid = os.spawnvp(os.P_NOWAIT, "vncviewer", vncargs)
+
     return VNC_BASE_PORT + display
     
 def preprocess_vnc(opts, vals):
@@ -639,6 +644,9 @@ def make_domain(opts, config):
         else:
             dominfo = server.xend_domain_create(config)
     except XendError, ex:
+        import signal
+        if vncpid:
+            os.kill(vncpid, signal.SIGKILL)
         opts.err(str(ex))
 
     dom = sxp.child_value(dominfo, 'name')